+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
+Sat Jun 30 20:44:48 2001 Owen Taylor <otaylor@redhat.com>
+
+ * gtk/gtktypeutils.c (gtk_type_class): Remove
+ change check for GTK_TYPE_OBJECT derivation to
+ G_TYPE_OBJECTS - it's Tim-approved to use this
+ for arbitary objects.
+
+ * gtk/gtkwindow.c gtk/gtkcontainer.[ch]: underscore
+ prefix gtk_container_dequeue_resize_handler().
+
+ * gtk/gtkwidget.[ch]: Add a previous_toplevel argument
+ to the hierarachy_changed signal, since you otherwise
+ have to always keep that around.
+
+ * gtk/gtkmenubar.c gtk/gtklabel.c gtk/gtksocket.c: Adapt
+ for extra argument to hierarchy_changed.
+
Tue Jun 26 19:39:03 2001 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_set_style): Allow %NULL
container = GTK_CONTAINER (object);
if (GTK_CONTAINER_RESIZE_PENDING (container))
- gtk_container_dequeue_resize_handler (container);
+ _gtk_container_dequeue_resize_handler (container);
if (container->resize_widgets)
gtk_container_clear_resize_widgets (container);
}
void
-gtk_container_dequeue_resize_handler (GtkContainer *container)
+_gtk_container_dequeue_resize_handler (GtkContainer *container)
{
g_return_if_fail (GTK_IS_CONTAINER (container));
g_return_if_fail (GTK_CONTAINER_RESIZE_PENDING (container));
gpointer callback_data);
gchar* gtk_container_child_composite_name (GtkContainer *container,
GtkWidget *child);
-void gtk_container_dequeue_resize_handler (GtkContainer *container);
+void _gtk_container_dequeue_resize_handler (GtkContainer *container);
#ifdef __cplusplus
}
const gchar *str,
gboolean with_uline);
static void gtk_label_recalculate (GtkLabel *label);
-static void gtk_label_hierarchy_changed (GtkWidget *widget);
+static void gtk_label_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel);
static void gtk_label_create_window (GtkLabel *label);
static void gtk_label_destroy_window (GtkLabel *label);
}
static void
-gtk_label_hierarchy_changed (GtkWidget *widget)
+gtk_label_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel)
{
GtkLabel *label = GTK_LABEL (widget);
GdkRectangle *area);
static gint gtk_menu_bar_expose (GtkWidget *widget,
GdkEventExpose *event);
-static void gtk_menu_bar_hierarchy_changed (GtkWidget *widget);
+static void gtk_menu_bar_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel);
static GtkShadowType get_shadow_type (GtkMenuBar *menubar);
static GtkMenuShellClass *parent_class = NULL;
"key_press_event",
G_CALLBACK (window_key_press_handler),
menubar);
-
- menubar->toplevel = GTK_WIDGET (window);
}
static void
remove_from_window (GtkWindow *window,
GtkMenuBar *menubar)
{
- g_return_if_fail (menubar->toplevel == GTK_WIDGET (window));
-
g_signal_handlers_disconnect_by_func (G_OBJECT (window),
G_CALLBACK (window_key_press_handler),
menubar);
-
- /* dnotify zeroes menubar->toplevel */
- g_object_set_data (G_OBJECT (window),
- "gtk-menu-bar",
- NULL);
-
- menubar->toplevel = NULL;
}
static void
-gtk_menu_bar_hierarchy_changed (GtkWidget *widget)
+gtk_menu_bar_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel)
{
GtkWidget *toplevel;
GtkMenuBar *menubar;
toplevel = gtk_widget_get_toplevel (widget);
- if (menubar->toplevel &&
- toplevel != menubar->toplevel)
- {
- remove_from_window (GTK_WINDOW (menubar->toplevel),
- menubar);
- }
+ if (old_toplevel && GTK_IS_WINDOW (old_toplevel))
+ remove_from_window (old_toplevel, menubar);
- if (toplevel &&
- GTK_IS_WINDOW (toplevel))
- {
- add_to_window (GTK_WINDOW (toplevel),
- menubar);
- }
+ if (toplevel && GTK_IS_WINDOW (toplevel))
+ add_to_window (GTK_WINDOW (toplevel), menubar);
}
static GtkShadowType
struct _GtkMenuBar
{
GtkMenuShell menu_shell;
-
- GtkWidget *toplevel;
};
struct _GtkMenuBarClass
GtkRequisition *requisition);
static void gtk_socket_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
-static void gtk_socket_hierarchy_changed (GtkWidget *widget);
+static void gtk_socket_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel);
static void gtk_socket_grab_notify (GtkWidget *widget,
gboolean was_grabbed);
static gboolean gtk_socket_key_press_event (GtkWidget *widget,
}
static void
-gtk_socket_hierarchy_changed (GtkWidget *widget)
+gtk_socket_hierarchy_changed (GtkWidget *widget,
+ GtkWidget *old_toplevel)
{
GtkSocket *socket = GTK_SOCKET (widget);
GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
gpointer class;
if (!G_TYPE_IS_ENUM (type) && !G_TYPE_IS_FLAGS (type))
- g_return_val_if_fail (GTK_TYPE_IS_OBJECT (type), NULL);
+ g_return_val_if_fail (G_TYPE_IS_OBJECT (type), NULL);
/* ok, this is a bit ugly, GLib reference counts classes,
* and gtk_type_class() used to always return static classes.
GTK_RUN_LAST,
GTK_CLASS_TYPE (object_class),
GTK_SIGNAL_OFFSET (GtkWidgetClass, hierarchy_changed),
- gtk_marshal_NONE__NONE,
- GTK_TYPE_NONE, 0);
+ gtk_marshal_VOID__OBJECT,
+ GTK_TYPE_NONE, 1,
+ GTK_TYPE_WIDGET);
widget_signals[STYLE_SET] =
gtk_signal_new ("style_set",
GTK_RUN_FIRST,
{
GObjectNotifyQueue *nqueue;
GtkWidget *toplevel;
+ GtkWidget *ancestor;
GtkWidget *old_parent;
g_return_if_fail (widget != NULL);
gtk_window_set_default (GTK_WINDOW (toplevel), NULL);
}
+ /* If we are unanchoring the child, we save around the toplevel
+ * to emit hierarchy changed
+ */
+ if (GTK_WIDGET_ANCHORED (widget->parent))
+ g_object_ref (toplevel);
+ else
+ toplevel = NULL;
+
if (GTK_IS_RESIZE_CONTAINER (widget))
gtk_container_clear_resize_widgets (GTK_CONTAINER (widget));
* Write a g_slist_conditional_remove (GSList, gboolean (*)(gpointer))
* Change resize_widgets to a GList
*/
- toplevel = widget->parent;
- while (toplevel)
+ ancestor = widget->parent;
+ while (ancestor)
{
GSList *slist;
GSList *prev;
- if (!GTK_CONTAINER (toplevel)->resize_widgets)
+ if (!GTK_CONTAINER (ancestor)->resize_widgets)
{
- toplevel = toplevel->parent;
+ ancestor = ancestor->parent;
continue;
}
prev = NULL;
- slist = GTK_CONTAINER (toplevel)->resize_widgets;
+ slist = GTK_CONTAINER (ancestor)->resize_widgets;
while (slist)
{
GtkWidget *child;
if (prev)
prev->next = slist;
else
- GTK_CONTAINER (toplevel)->resize_widgets = slist;
+ GTK_CONTAINER (ancestor)->resize_widgets = slist;
g_slist_free_1 (last);
}
prev = last;
}
- toplevel = toplevel->parent;
+ ancestor = ancestor->parent;
}
gtk_widget_queue_clear_child (widget);
widget->parent = NULL;
gtk_widget_set_parent_window (widget, NULL);
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[PARENT_SET], old_parent);
- gtk_widget_propagate_hierarchy_changed (widget, NULL);
+ if (toplevel)
+ {
+ gtk_widget_propagate_hierarchy_changed (widget, toplevel);
+ g_object_unref (toplevel);
+ }
+
g_object_notify (G_OBJECT (widget), "parent");
g_object_thaw_notify (G_OBJECT (widget));
if (!widget->parent)
gtk_widget_set_style_recurse (widget, NULL);
gtk_signal_emit (GTK_OBJECT (widget), widget_signals[PARENT_SET], NULL);
- gtk_widget_propagate_hierarchy_changed (widget, NULL);
+ if (GTK_WIDGET_ANCHORED (widget->parent))
+ gtk_widget_propagate_hierarchy_changed (widget, NULL);
g_object_notify (G_OBJECT (widget), "parent");
}
else
GTK_PRIVATE_UNSET_FLAG (widget, GTK_ANCHORED);
- g_signal_emit (GTK_OBJECT (widget), widget_signals[HIERARCHY_CHANGED], 0);
+ g_signal_emit (GTK_OBJECT (widget), widget_signals[HIERARCHY_CHANGED],
+ 0, client_data);
if (GTK_IS_CONTAINER (widget))
gtk_container_forall (GTK_CONTAINER (widget),
GtkStateType previous_state);
void (* parent_set) (GtkWidget *widget,
GtkWidget *previous_parent);
- void (* hierarchy_changed) (GtkWidget *widget);
+ void (* hierarchy_changed) (GtkWidget *widget,
+ GtkWidget *previous_toplevel);
void (* style_set) (GtkWidget *widget,
GtkStyle *previous_style);
void (* direction_changed) (GtkWidget *widget,
*/
gtk_widget_queue_resize (GTK_WIDGET (container));
if (container->resize_mode == GTK_RESIZE_QUEUE)
- gtk_container_dequeue_resize_handler (container);
+ _gtk_container_dequeue_resize_handler (container);
}
else
{